package gsw.demo.mvp.demo.dagger.component;

import javax.inject.Singleton;

import dagger.Component;
import gsw.demo.mvp.demo.dagger.ActivityDagger;
import gsw.demo.mvp.demo.dagger.module.UserAModule;

/**
 * Component：用来注册对象
 *
 * @Component 用来声明Component接口。
 * 入参modules用来声明UserModule，如果是单个值，则直接等于，如果是多个值，则使用{A,B}
 * 入参dependencies用来声明依赖的Component。依赖的Component与自己的Scope(作用跟@Singleton一样，只是名字不同)不能相同。
 *  注意：Singleton类型的Component，不能依赖其他Component；当多个个Component注册同一个类时，需要用dependencies，因为一个类只会生成一个MembersInjector。
 * @Singleton 用来声明单例对象。使用@Named，可以生成多个带Named的全局对象。
 */
@Singleton
@Component(modules = {UserAModule.class})
public interface UserAComponent {

    /**
     * 注册对象
     *
     * @param activity 被注册的对象，用来接收new对象。注意：传参时，类型必须完全一致，不能使用多态。
     */
    void inject(ActivityDagger activity);
}







